import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime

# 读取数据
df = pd.read_csv('/Users/linshangjin/25CCM/NKU-C/dataset_csv/人均收入_季度数据.csv', parse_dates=True, index_col=0)

# 1. 移除空值时间段（保留2013年之后的数据）
valid_data = df[df['人均可支配收入'].notna()].copy()

# 2. 生成完整的日期索引（季度末日期）
start_date = valid_data.index.min()
end_date = valid_data.index.max()
all_dates = pd.date_range(start=start_date, end=end_date, freq='Q')

# 3. 重新索引并线性插值
valid_data = valid_data.reindex(all_dates)
interpolated_data = valid_data.interpolate(method='linear')

# 4. 填充可能的剩余空值（首尾）
interpolated_data = interpolated_data.fillna(method='bfill').fillna(method='ffill')

# 5. 重新计算占比（确保插值后结构一致）
income_cols = ['工资性收入', '经营净收入', '财产净收入', '转移净收入']
for col in income_cols:
    interpolated_data[f'{col}占比'] = interpolated_data[col] / interpolated_data['人均可支配收入'] * 100

# 保存处理后的数据
interpolated_data.to_csv('/Users/linshangjin/25CCM/NKU-C/dataset_csv/人均收入_季度数据_插值后.csv', encoding='utf-8-sig')

# 可视化验证
plt.figure(figsize=(12, 6))
plt.plot(interpolated_data.index, interpolated_data['人均可支配收入'], 
         label='人均可支配收入（插值后）', color='#E91E63', linestyle='-')
plt.scatter(valid_data.index, valid_data['人均可支配收入'], 
            label='原始数据点', color='#2196F3', zorder=5)
plt.title('人均可支配收入趋势（2013-2025年插值结果）', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('元', fontsize=12)
plt.legend()
plt.grid(True, linestyle='--', alpha=0.6)
plt.savefig('/Users/linshangjin/25CCM/NKU-C/数据图表/人均可支配收入_插值效果验证.png', bbox_inches='tight', dpi=300)
plt.close()

print("处理完成！结果已保存到：")
print("/Users/linshangjin/25CCM/NKU-C/dataset_csv/人均收入_季度数据_插值后.csv")
print("/Users/linshangjin/25CCM/NKU-C/数据图表/人均可支配收入_插值效果验证.png")